View Javadoc
1   package edu.jiangxin.apktoolbox.convert.color.colorspace;
2   
3   import java.awt.color.ColorSpace;
4   import java.io.Serial;
5   
6   public class CmykColorSpace extends ColorSpace {
7       @Serial
8       private static final long serialVersionUID = 1L;
9   
10      protected CmykColorSpace(int type, int numComponents) {
11          super(type, numComponents);
12      }
13  
14      public static CmykColorSpace getInstance() {
15          return Holder.INSTANCE;
16      }
17  
18      @Override
19      public float[] toRGB(float[] colorvalue) {
20          float c = colorvalue[0];
21          float m = colorvalue[1];
22          float y = colorvalue[2];
23          float k = colorvalue[3];
24  
25          float r = 1 - Math.min(1, c * (1 - k) + k);
26          float g = 1 - Math.min(1, m * (1 - k) + k);
27          float b = 1 - Math.min(1, y * (1 - k) + k);
28  
29          return new float[]{r, g, b};
30      }
31  
32      @Override
33      public float[] fromRGB(float[] rgbvalue) {
34          float r = rgbvalue[0];
35          float g = rgbvalue[1];
36          float b = rgbvalue[2];
37  
38          float k = 1 - Math.max(r, Math.max(g, b));
39          float c = (1 - r - k) / (1 - k);
40          float m = (1 - g - k) / (1 - k);
41          float y = (1 - b - k) / (1 - k);
42  
43          return new float[]{c, m, y, k};
44      }
45  
46      @Override
47      public float[] toCIEXYZ(float[] colorvalue) {
48          float[] rgb = toRGB(colorvalue);
49          return ColorSpace.getInstance(CS_sRGB).toCIEXYZ(rgb);
50      }
51  
52      @Override
53      public float[] fromCIEXYZ(float[] colorvalue) {
54          float[] rgb = ColorSpace.getInstance(CS_sRGB).fromCIEXYZ(colorvalue);
55          return fromRGB(rgb);
56      }
57  
58      private static class Holder {
59          private static final CmykColorSpace INSTANCE = new CmykColorSpace(TYPE_CMYK, 4);
60      }
61  }